include GeoHelper
class RestaurantsController < ApplicationController
  filter_access_to :all

  def index
    @restaurants = Restaurant.find(:all, :order => :name)
  end

  def map
    # Creo la mappa
    @map = GMap.new("mapBlock")
    @map.control_init(:large_map => true,:map_type => true)
    @map.clear_overlays

    # Aggiungo alla mappa un marker per ogni ristorante
    Restaurant.all.each do |restaurant|
      info = "<h3>#{restaurant.name}</h3><p><strong>Telefono: </strong>#{restaurant.phonenumber}<br/><strong>Indirizzo: </strong>#{restaurant.address}</p>"
      marker = GMarker.new([restaurant.latitude,restaurant.longitude], :title => restaurant.name, :info_window => info)
      @map.overlay_init marker
    end

    #ho due zoom, uno piu adatto per la latitudine, uno per la longitudine
    zoom1= ((((5/(Restaurant.maximum('longitude')-Restaurant.minimum('longitude'))))**0.39)+9).to_int
    zoom2= ((((5/(Restaurant.maximum('latitude')-Restaurant.minimum('latitude'))))**0.39)+7).to_int
    #
    # @Luca: ho fatto due conti considerando la scala di ogni grado di zoom (non è lineare) e mappandola con
    # una dimensione della finestra di 640x480 sembra abbastanza affidabile, le funzioni sono nel file Helper
    # sotto app/helpers/restaurants.rb
    #zoom1 = zoom_from_q(q_width_for_km(distance_km_from_degrees(Restaurant.maximum('longitude')-Restaurant.minimum('longitude'))))
    #zoom2 = zoom_from_q(q_height_for_km(distance_km_from_degrees(Restaurant.maximum('latitude')-Restaurant.minimum('latitude'))))
    #come zoom prendo il minore tra zoom per latitudine e zoom longitudine.. cosi se modifico il ratio
    #del frame che visualizza la mappa, viene scelto sempre lo zoom corretto
    zoom=[zoom1,zoom2].min
    #come coordinate del centro uso  la media tra i minimi valori e i massimi, l'average non va bene
    #    #perche fa una media tra tutte.. quindi sposta il centro su dove è presente la massima densità
    @map.center_zoom_init([(Restaurant.maximum('latitude')+Restaurant.minimum('latitude'))/2,(Restaurant.maximum('longitude')+Restaurant.minimum('longitude'))/2],zoom)

  end

  def edit
    @restaurant = @current_account.user
  end

  def update
    respond_to do |format|
      if @current_account.user.update_attributes(params[:restaurant]) and
          @current_account.update_attributes(params[:account])
        flash[:notice] = 'il tuo profilo è stato modificato.'
        format.html { redirect_to edit_restaurant_path }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @restaurant.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    if @current_account.destroy
      flash[:notice] = "La pizzeria è stata eliminata!"
    else
      flash[:error] = "Errore di sistema"
    end
    redirect_to root_path
  end
end
